#!/bin/bash

# ===================================================================
# Mac版本的Docker项目文件拷贝工具
# 复制项目的文件到对应docker路径，便于一键生成镜像
# ===================================================================

echo "===================================================="
echo "           开始拷贝项目文件到Docker目录..."
echo "           (自动清理旧文件，确保使用最新版本)"
echo "===================================================="
echo

# 获取脚本所在目录的绝对路径
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"

echo "当前目录: $(pwd)"
echo

# ===================================================================
# 模块配置区域 - 在这里添加或修改模块
# ===================================================================
#
# 📝 配置说明：
# 
# 1. 前端模块配置 (FRONTEND_MODULE)：
#    - 索引0: 模块名称
#    - 索引1: 源路径 (通常是 dist 目录)
#    - 索引2: 目标路径 (docker目录中的路径)
#    - 索引3: 显示名称 (日志中显示的友好名称)
#
# 2. 后端模块配置 (BACKEND_MODULES)：
#    每行格式: "模块名 源目录 JAR文件名 目标目录 显示名称"
#    - 模块名: 用于标识的模块名称
#    - 源目录: 项目源码目录 (相对于此脚本的路径)
#    - JAR文件名: 编译后的JAR文件名
#    - 目标目录: docker目录中的JAR存放路径
#    - 显示名称: 日志中显示的友好名称
#
# 🆕 如何添加新模块：
#    1. 在 BACKEND_MODULES 数组中添加新行
#    2. 按照格式填写模块信息
#    3. 确保对应的 docker-compose.yml 中也有相应的服务配置
#    4. 确保目标目录下有对应的 dockerfile
#
# 📋 示例：
#    添加一个新的定时任务模块：
#    "hello-modules-job ../hello-modules/hello-job hello-modules-job.jar ./hello/modules/job/jar 定时任务模块"
#
#    添加一个新的支付模块：
#    "hello-modules-pay ../hello-modules/hello-pay hello-modules-pay.jar ./hello/modules/pay/jar 支付模块"
#
# ===================================================================

# 前端模块配置
FRONTEND_MODULE=(
    "hello-ui"                    # 模块名称
    "../hello-ui/dist"           # 源路径
    "./nginx/dist"               # 目标路径
    "前端文件"                    # 显示名称
)

# 后端模块配置数组
# 格式: "模块名 源目录 JAR文件名 目标目录 显示名称"
BACKEND_MODULES=(
    "hello-gateway ../hello-gateway hello-gateway.jar ./hello/gateway/jar Gateway模块"
    "hello-auth ../hello-auth hello-auth.jar ./hello/auth/jar 认证模块"
    "hello-modules-system ../hello-modules/hello-system hello-modules-system.jar ./hello/modules/system/jar 系统管理模块"
    "hello-modules-file ../hello-modules/hello-file hello-modules-file.jar ./hello/modules/file/jar 文件管理模块"
    
    # 🆕 在这里添加新模块
    # "hello-modules-job ../hello-modules/hello-job hello-modules-job.jar ./hello/modules/job/jar 定时任务模块"
    # "hello-modules-pay ../hello-modules/hello-pay hello-modules-pay.jar ./hello/modules/pay/jar 支付模块"
    # "hello-modules-member ../hello-modules/hello-member hello-modules-member.jar ./hello/modules/member/jar 会员模块"
    # "hello-modules-im ../hello-modules/hello-im hello-modules-im.jar ./hello/modules/im/jar 即时通讯模块"
)

# ===================================================================
# 检查源目录函数
# ===================================================================
check_directories() {
    echo "[INFO] 检查源目录是否存在..."
    
    # 检查前端目录
    if [ ! -d "${FRONTEND_MODULE[1]}" ]; then
        echo "[WARNING] 未找到 ${FRONTEND_MODULE[1]} 目录，请先构建前端项目"
    fi
    
    # 检查后端模块目录
    for module_config in "${BACKEND_MODULES[@]}"; do
        read -r module_name source_dir jar_name target_dir display_name <<< "$module_config"
        target_check_dir="${source_dir}/target"
        if [ ! -d "$target_check_dir" ]; then
            echo "[WARNING] 未找到 $target_check_dir 目录，请先编译 $display_name"
        fi
    done
    echo
}

# 执行目录检查
check_directories

# ===================================================================
# 前端文件拷贝函数
# ===================================================================
copy_frontend() {
    local module_name="${FRONTEND_MODULE[0]}"
    local source_path="${FRONTEND_MODULE[1]}"
    local target_path="${FRONTEND_MODULE[2]}"
    local display_name="${FRONTEND_MODULE[3]}"
    
    echo "[INFO] 开始拷贝$display_name..."
    if [ -d "$source_path" ]; then
        # 清理目标目录
        if [ -d "$target_path" ]; then
            echo "[INFO] 清理旧的$display_name..."
            rm -rf ${target_path}/*
        fi
        mkdir -p "$target_path"
        cp -r ${source_path}/* "$target_path"/
        if [ $? -eq 0 ]; then
            echo "[SUCCESS] $display_name 拷贝完成"
        else
            echo "[ERROR] $display_name 拷贝失败"
        fi
    else
        echo "[SKIP] 跳过$display_name 拷贝（源目录不存在）"
    fi
    echo
}

# 执行前端文件拷贝
copy_frontend

# ===================================================================
# 后端JAR文件拷贝函数
# ===================================================================
copy_backend_module() {
    local module_name="$1"
    local source_dir="$2"
    local jar_name="$3"
    local target_dir="$4"
    local display_name="$5"
    
    local source_jar="${source_dir}/target/${jar_name}"
    local target_jar="${target_dir}/${jar_name}"
    
    echo "[INFO] 开始拷贝${display_name}..."
    if [ -f "$source_jar" ]; then
        # 清理旧的JAR文件
        if [ -f "$target_jar" ]; then
            echo "[INFO] 清理旧的${jar_name}..."
            rm -f "$target_jar"
        fi
        mkdir -p "$target_dir"
        cp "$source_jar" "$target_jar"
        if [ $? -eq 0 ]; then
            echo "[SUCCESS] ${jar_name} 拷贝完成"
        else
            echo "[ERROR] ${jar_name} 拷贝失败"
        fi
    else
        echo "[SKIP] 跳过${jar_name}拷贝（文件不存在）"
    fi
    echo
}

# 循环处理所有后端模块
echo "[INFO] 开始拷贝后端JAR文件..."
for module_config in "${BACKEND_MODULES[@]}"; do
    read -r module_name source_dir jar_name target_dir display_name <<< "$module_config"
    copy_backend_module "$module_name" "$source_dir" "$jar_name" "$target_dir" "$display_name"
done

# 显示拷贝结果总结
echo "===================================================="
echo "           文件拷贝操作完成！"
echo "===================================================="
echo

# ===================================================================
# 检查拷贝结果函数
# ===================================================================
check_copy_results() {
    echo "[INFO] 检查拷贝结果："
    
    # 检查前端文件
    local frontend_target="${FRONTEND_MODULE[2]}"
    local frontend_display="${FRONTEND_MODULE[3]}"
    if [ -d "$frontend_target" ] && [ "$(ls -A $frontend_target)" ]; then
        echo "✓ $frontend_display 已拷贝到: $frontend_target"
    else
        echo "✗ $frontend_display 拷贝失败或目录为空"
    fi
    
    # 检查后端JAR文件
    for module_config in "${BACKEND_MODULES[@]}"; do
        read -r module_name source_dir jar_name target_dir display_name <<< "$module_config"
        local target_jar="${target_dir}/${jar_name}"
        if [ -f "$target_jar" ]; then
            echo "✓ $display_name 已拷贝到: $target_dir"
        else
            echo "✗ $display_name 拷贝失败"
        fi
    done
    
    echo
    echo "现在可以运行 docker-compose build 来构建镜像了"
    echo
}

# 执行结果检查
check_copy_results

echo "按任意键退出..."
read -n 1 -s